home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
DDJ0992.ARJ
/
DUNHAM.LS6
< prev
next >
Wrap
Text File
|
1992-04-20
|
4KB
|
204 lines
/* Listing #6: test.c program to demonstrate crash tracebacks */
#define DEBUGPRINT /* we don't want debug info */
#ifdef DEBUGPRINT
# define DBPRINT(s) printf s
#else
# define DBPRINT(s)
#endif
void tst_segv(),tst_bus();
void tst_fltdiv(), tst_intdiv();
void tst_lv4(),tst_lv3(),tst_lv2(),tst_lv1();
/*----------------------------------------*/
void tst_segv() /* cause a segmentation fault */
{
char *ptr;
DBPRINT((" in segv\n"));
ptr=0;
*ptr=4;
}
void tst_fltdiv() /* cause a floating divide by zero */
{
char text[16];
float e,d,f;
/*-------------------------------*/
strcpy(text,"fltdiv");
DBPRINT((" in fltdiv \n"));
f= 127.0;
e= 0.0;
d= 126.0;
f=d/e;
}
void tst_intdiv() /* cause an integer divide by zero */
{
int a,b,c;
DBPRINT((" in intdiv \n"));
c=12;
a=1;
b=0;
c=a/b;
}
void tst_lv4(paramtext) /* 4 levels deep */
char *paramtext;
{
long l4;
char text[16];
l4= 0xcafefade;
strcpy(text,"level4");
tst_segv();
}
void tst_lv3(paramtext) /* 3 levels deep */
char *paramtext;
{
long l3;
char text[16];
l3= 0xdeafdead;
strcpy(text,"level3");
tst_lv4("call 4");
}
void tst_lv2(paramtext) /* 2 levels deep */
char *paramtext;
{
long l2;
char text[17];
l2= 0xfeedface;
strcpy(text,"level2");
tst_lv3("call 3");
}
void tst_lv1() /* 1 level deep */
{
long l1, *lptr;
char text[16];
l1= 0xdeedfade;
lptr= &l1;
strcpy(text,"level1");
tst_lv2("call 2");
}
void tst_bus() /* cause a bus error */
{
short s1;
long address;
short *ptr;
unsigned long uu;
char text[16];
strcpy(text,"level1");
s1=0x00ef;
ptr= &s1;
address= (long)ptr;
uu= *(long *)address;
printf("bus error: address=%X uu=%X \n",address,uu);
}
void tst_param(ii,ss,ff,dd,cc,uc,us,ul,ui) /* dump parameters */
int ii;
short ss;
float ff;
double dd;
char cc;
unsigned char uc;
unsigned short us;
unsigned long ul;
unsigned int ui;
{
tst_segv();
}
void tst_param2(ii,ss,ff,dd,cc,uc,us,ul,ui,ptr) /* dump parameters */
int *ii; /* passed by pointer */
short *ss;
float *ff;
double *dd;
char *cc;
unsigned char *uc;
unsigned short *us;
unsigned long *ul;
unsigned int *ui;
char *ptr;
{
tst_segv();
}
main(argc,argv)
int argc;
char *argv[];
{
int ii;
char cc;
long ll;
short ss;
float ff;
double dd;
unsigned char uc;
unsigned short us;
unsigned long ul;
unsigned int ui;
int iarr[12];
float farr[8];
char text[21];
int random;
/*--------------------*/
trb_signalinit(argc,argv); /* install our signal handler */
ll=0xfeeadded; /* easy to recognize hex values */
strcpy(text,"traceback");
for(ii=0;ii<12;ii++) iarr[ii]=ii; /* see if we dump arrays ok */
for(ii=0,ff=100;ii<8;ii++,ff++) farr[ii]=ff;
ii=12; /* miscellaneous values */
cc='q';
ss=24;
ff=256.0;
dd=512.0;
uc= 65;
us= -4;
ul= -8;
ui= -16;
/* get a random number */
random= time(0);
random= random & 7;
printf("random= %d \n",random);
switch (random)
{case 1: tst_bus(); /* bus error */
break;
case 2: tst_segv(); /* segmentation fault */
break;
case 3: tst_intdiv(); /* integer divide */
break;
case 4: tst_fltdiv(ll,ss,ff,dd); /* float divide */
break;
case 5: tst_lv1(); /* several call levels */
break;
case 6: tst_param(ii,ss,ff,dd,cc,uc,us,ul,ui);
break; /* pass parameters by value */
case 7: tst_param2(&ii,&ss,&ff,&dd,&cc,&uc,&us,&ul,&ui,text);
break; /* pass parameters by pointers */
default: break;
} /* end of switch */
exit(0);
}